In a computer program, a caller routine of a first compilation module may pass a set of one or more parameters to a callee routine of separately compiled second compilation module through an interface, and the compilation modules may be subsequently linked to execute within a computer system.
The interface may correspond to an accepted convention or standard, such as an application binary interface (ABI). An ABI may describe a low-level interface between computer programs, and may address calling convention details such as data type, size, and alignment, to control passing and returning of function arguments or parameters. Under Windows IA-32 and Linux calling conventions, for example, function parameters are passed on a call stack.
Low level software writers or compilers may construct an interface that does not follow convention, or modify an existing interface such that the interface no longer follows convention. In a 32 bit Windows or Linux environment, for example, an interface may be modified to pass a parameter through a register to avoid memory load/stores associated with a call stack.
Conventionally, an interface may be constructed or modified contrary to convention when a modifier (programmer or compiler) has access to the callee and all callers of the callee. Where not all of the callers are available, the interface of available callers may be modified provided that the callee is configured to accommodate both the modified interface and an interface by convention, which may be used by other callers. In other words, the callee routine and at least one of the caller routines are modified.
In the drawings, the leftmost digit(s) of a reference number identifies the drawing in which the reference number first appears.